﻿package string;

public class 字符串转数字 {
	public static boolean isValid(char[] chrs) {
		if (chrs[0] != '-' && (chrs[0] < '0' || chrs[0] > '9')) {
			return false;
		}
		if (chrs[0] == '-' && (chrs.length == 1 || chrs[1] == '0')) {
			return false;
		}
		if (chrs[0] == '0' && chrs.length > 0) {
			return false;
		}
		for (int i = 01; i < chrs.length; i++) {
			if (chrs[i] < '0' || chrs[i] > '9')
				return false;
		}
		return true;
	}

	public static int convert(String str) {
		if (str == null || str.equals("")) {
			return 0;// 不能转
		}
		char[] chrs = str.toCharArray();
		if (!isValid(chrs)) {
			return 0;// 不合法
		}
		
		boolean posi = chrs[0] == '-' ? false : true;
		
		int minq = Integer.MIN_VALUE / 10;
		int minr = Integer.MIN_VALUE % 10;// 余数
		int cur = 0;
		int res = 0;
		
		for (int i = posi ? 0 : 1; i < chrs.length; i++) {
			cur = '0' - chrs[i];
			if ((res < minq) || (res == minq && cur < minr)) {
				return 0;// 不能转
			}
			// 可以转的情况
			res = res * 10 + cur;
		}
		if (posi && res == Integer.MIN_VALUE) {
			// 如果已经是2147483648了，就不能转为正数了
			return 0;
		}
		return posi ? -res : res;
	}

	public static void main(String[] args) {
		System.out.println(convert("123"));
		System.out.println(convert("-0123"));
		System.out.println(convert("-ABCSD"));
		System.out.println(convert("A0232"));
	}
}
